『Node.jsデザインパターン 第2版』
https://gyazo.com/7c08196c1456674076e4f9aa1289c464
2019/5/18
1章
ソフトウェア哲学の話など
2章
まえがき
1章 Node.jsの世界へようこそ
1.1 Node.jsの「哲学」
1.1.1 小さなコア
1.1.2 小さなモジュール
1.1.3 露出部分最小化
1.1.4 単純さと実用主義
1.2 リアクタパターン
1.2.1 入出力は遅い
1.2.2 入出力のブロック
1.2.3 ノンブロッキングI/O
1.2.4 イベント多重分離
1.2.5 リアクタパターン
1.2.7 Node.jsのアーキテクチャ
1.3 まとめ
2章 Node.jsの基本パターン
2.1 コールバックパターン
2.1.1 継続渡しスタイル(continuation-passing style:CPS) 2.1.2 同期処理か非同期処理か
2.1.3 Node.jsのコールバック
2.2 モジュールシステムとパターン
2.2.1 公開モジュールパターン
2.2.2 Node.jsモジュールシステムの詳細
2.2.3 モジュール定義におけるパターン
2.3 オブザーバパターン
2.3.2 EventEmitterの使用例
2.3.3 エラーの伝播
2.3.4 EventEmitterクラスの拡張
2.3.5 同期イベントと非同期イベント
2.3.6 コールバックとの使い分け
2.3.7 コールバックとEventEmitterの組み合わせ
2.4 まとめ
3章 コールバックを用いた非同期パターン
3.1 非同期プログラミングの難しさ
3.1.1 ウェブスパイダーを作って学ぶ非同期プログラミング
3.1.2 コールバック地獄
3.2 非同期パターン(素のJavaScript編)
3.2.1 基本原則
3.2.2 基本原則の適用
3.2.3 逐次処理
3.2.4 並行処理
3.2.5 同時実行数を制限した並行処理パターン
3.3 非同期パターン(asyncライブラリ編)
3.3.1 逐次処理
3.3.2 並行処理
3.3.3 同時実行数を制限した並行処理パターン
3.4 まとめ
4章 ES2015以降の機能を使った非同期パターン
4.1 プロミス
4.1.1 プロミスの基礎
4.1.2 プロミスの実装
4.1.3 Node.jsのAPIをプロミス化する
4.1.4 逐次処理
4.1.5 並行処理
4.1.6 同時実行数を制限した並行処理パターン
4.1.7 コールバックとプロミスの両方をサポートするAPI
4.2 ジェネレータ
4.2.1 ジェネレータの基礎
4.2.2 ジェネレータを使った非同期制御フロー
4.2.3 逐次処理
4.2.4 並行処理
4.2.5 同時実行数を制限した並行処理パターン
4.3 async/await
4.4 非同期プログラミングの手法の比較
4.5 まとめ
5章 ストリーム
5.1 ストリームの重要性
5.1.1 バッファvs.ストリーム
5.1.2 領域的な効率
5.1.3 時間的な効率
5.1.4 コンポーザビリティ
5.2 ストリームの基本的な使い方
5.2.1 ストリームの詳細
5.2.2 Readableストリーム
5.2.3 Writableストリーム
5.2.4 Duplexストリーム
5.2.5 Transformストリーム
5.2.6 パイプを使ったストリームの接続
5.3 非同期プログラミングにおけるストリームの活用
5.3.1 逐次実行
5.3.2 順序なしの並行実行
5.3.3 順序なしの制限付き並行実行
5.4 パイプ処理パターン
5.4.1 Combinedストリーム
5.4.2 ストリームのフォーク
5.4.3 ストリームのマージ
5.4.4 マルチプレクシングとデマルチプレクシング
5.5 まとめ
6章 オブジェクト指向デザインパターンのNode.jsへの適用
6.1 ファクトリ
6.1.1 オブジェクト生成の一般的インタフェース
6.1.2 カプセル化強化の仕組み
6.1.3 単純なコードプロファイラの作成
6.1.4 合成可能ファクトリ関数
6.1.5 実践での利用
6.2 公開コンストラクタ
6.2.1 読み出し専用イベントエミッタ
6.2.2 実践での利用
6.3 プロキシ
6.3.1 プロキシ実装の手法
6.3.2 異なる技法の比較
6.3.3 ログ付きの出力ストリームの作成
6.3.4 現場でのプロキシ.関数フッキングとAOP
6.3.5 ES2015のプロキシ
6.3.6 実践での利用
6.4 デコレータ
6.4.1 デコレータの実装
6.4.2 データベースLevelUPへのデコレータ使用
6.4.3 実践での利用
6.5 アダプタ
6.5.1 ファイルシステムAPIによるLevelUPの利用
6.5.2 実践での利用
6.6 ストラテジー
6.6.1 マルチフォーマットの設定用オブジェクト
6.6.2 実践での利用
6.7 ステート
6.7.1 基本的なフェイルセーフソケットの実装
6.8 テンプレート
6.8.1 設定管理用テンプレート
6.8.2 実践での利用
6.9 ミドルウェア
6.9.1 Expressにおけるミドルウェア
6.9.2 パターンとしてのミドルウェア
6.9.3 OMQ用のミドルウェアフレームワークの作成
6.9.4 Koaのジェネレータを使用したミドルウェア
6.10 コマンド
6.10.1 柔軟なパターン
6.11 まとめ
7章 モジュールの接続
7.1 モジュールと依存関係
7.1.1 Node.jsにおけるもっとも一般的な依存関係
7.1.2 凝集度と結合度
7.1.3 ステートをもつモジュール
7.2 モジュール接続のためのパターン
7.2.1 依存関係のハードコーディング
7.2.2 依存性注入
7.2.3 サービスロケータ
7.2.4 DIコンテナ
7.3 プラグインの接続
7.3.1 パッケージとしてのプラグイン
7.3.2 拡張ポイント
7.3.3 拡張機能のプラグイン側制御とアプリケーション側制御
7.3.4 ログアウトプラグインの実装
7.4 まとめ
8章 ユニバーサルJavaScript
8.1 ブラウザとのコード共有
8.1.1 モジュールの共有
8.2 Webpackの導入
8.2.1 Webpackの魔法を探る
8.2.2 Webpackを使う利点
8.2.3 ES2015をWebpackとともに使用
8.3 クロスプラットフォーム開発の基礎
8.3.1 実行時のコード分岐
8.3.2 ビルド時のコード分岐
8.3.3 モジュールの置換
8.3.4 クロスプラットフォーム開発向けのデザインパターン
8.4 Reactの紹介
8.4.1 最初のReactコンポーネント
8.4.2 JSXとは
8.4.3 JSXトランスパイルを実行させるWebpack設定
8.4.4 ブラウザでの描画
8.4.5 ライブラリReact Router
8.5 ユニバーサルJavaScriptアプリケーションの作成
8.5.1 再利用可能なコンポーネントの作成
8.5.2 サーバ側でのレンダリング
8.5.3 ユニバーサルレンダリングとルーティング
8.5.4 ユニバーサルなデータ取得
8.6 まとめ
9章 特殊な問題を解決するためのパターン
9.1 非同期に初期化されるモジュールのrequire
9.1.1 標準的なソリューション
9.1.2 初期化前キュー
9.1.3 実践での利用
9.2 非同期のバッチ処理とキャッシュの利用
9.2.1 キャッシュ処理もバッチ処理もないサーバの実装
9.2.2 非同期リクエストのバッチ処理
9.2.3 非同期リクエストのキャッシュ処理
9.2.4 プロミスを使ったバッチ処理とキャッシュ処理
9.3 CPUバウンドなタスクの実行
9.3.1 部分和問題の解法
9.3.2 setImmediateによるインタリーブ
9.3.3 マルチプロセス
9.4 まとめ
10章 スケーラビリティとアーキテクチャ
10.1 アプリケーションスケーリング入門
10.1.1 Node.jsアプリケーションのスケーリング
10.1.2 スケーラビリティの3つの次元
10.2 クローニングと負荷分散
10.2.1 モジュールcluster
10.2.2 ステートのある接続の処理
10.2.3 リバースプロキシによるスケーリング
10.2.4 サービスレジストリの利用
10.2.5 ピアツーピア負荷分散
10.3 複雑なアプリケーションの分解
10.3.1 モノリシックなアーキテクチャ
10.3.2 マイクロサービスのアーキテクチャ
10.3.3 マイクロサービスアーキテクチャにおける統合パターン
10.4 まとめ
11章 メッセージ通信と統合
11.1 メッセージ通信システムの基礎
11.1.1 一方向パターンとリクエスト/リプライ・パターン
11.1.2 メッセージの種類
11.1.3 非同期メッセージ送信とキュー
11.1.4 ピアツーピアメッセージ通信とブローカを使ったメッセージ通信
11.2 パブリッシュ/サブスクライブ(pub/sub)パターン
11.2.1 機能最小限のリアルタイムチャットアプリケーションの作成
11.2.2 メッセージブローカとしてのRedisの使用
11.2.3 OMQを使ったピアツーピア型パブリッシュ/サブスクライブ
11.2.4 永続サブスクライバ
11.3 パイプラインとタスク分散パターン
11.3.1 OMQのファンアウト/ファンイン・パターン
11.3.2 パイプラインとAMQPの競合コンシューマ
11.4 リクエスト/リプライ・パターン
11.4.1 相関識別子
11.4.2 返信先アドレス
11.5 まとめ
付録A ES2015以降のJavaScriptの主要機能
A.1 letとconst
A.2 アロー関数
A.3 class構文
A.4 オブジェクトリテラルの改善
A.5 MapとSet
A.6 WeakMapとWeakSet
A.7 テンプレートリテラル
A.8 その他のES2015の機能
索引